# -*- coding: utf-8 -*-

# # Python 脚本自动化清理：
# # 清理 __pycache__ 目录 和 清理 .pyc 文件（即编译后的字节码文件）

import os  
import shutil 
from pathlib import Path

def clean_logs_directory(logs_path="logs"):
    """
    安全清理指定日志目录下的所有内容
    :param logs_path: 日志目录路径，默认为当前目录下的logs文件夹
    :return: (bool, str) 操作结果和消息
    """
    try:
        # 转换为绝对路径防止相对路径问题
        target_dir = Path(logs_path).resolve()
        
        # 安全验证：禁止删除系统关键目录
        forbidden_dirs = {
            Path("/"), 
            Path.home(), 
            Path.cwd().root,
            Path(__file__).resolve().parent  # 禁止删除脚本所在目录
        }
        if any(target_dir == fd for fd in forbidden_dirs):
            return False, "禁止删除系统关键目录！"

        # 验证目标是否存在
        if not target_dir.exists():
            return False, f"目录不存在: {target_dir}"
        
        # 二次确认
        confirm = input(f"确认要永久删除 {target_dir} 下的所有内容？(输入 DELETE 确认): ")
        if confirm.strip().upper() != "DELETE":
            return False, "操作已取消"

        # 遍历清理
        for item in target_dir.glob('*'):
            try:
                if item.is_file() or item.is_symlink():
                    # 解除只读属性（Windows需要）
                    os.chmod(item, 0o777)
                    item.unlink()  # 删除文件/符号链接
                elif item.is_dir():
                    shutil.rmtree(item)  # 递归删除子目录
            except Exception as e:
                print(f"删除 {item.name} 失败: {str(e)}")
                continue

        return True, f"成功清理目录: {target_dir}"
    
    except Exception as e:
        return False, f"发生意外错误: {str(e)}"

def purge_cache(path): 
    """
    清理指定目录下的所有 __pycache__ 目录和 .pyc 文件
    :param path: 要清理的目录路径
    """ 
    for root, dirs, files in os.walk(path):  
        # 删除 __pycache__ 目录  
        if "__pycache__" in dirs:  
            dir_path = os.path.join(root, "__pycache__")  
            shutil.rmtree(dir_path)  
            print(f"已删除目录: {dir_path}")  
        # 删除 .pyc 文件  
        for file in files:  
            if file.endswith(".pyc"):  
                file_path = os.path.join(root, file)  
                os.remove(file_path)  
                print(f"已删除文件: {file_path}")  


# 在脚本末尾添加执行代码
if __name__ == "__main__":
    target_path = input("请输入要清理的路径（留空则默认当前目录）: ").strip()
    if not target_path:
        target_path = os.getcwd()  # 默认当前工作目录
    purge_cache(target_path)
    clean_logs_directory()

'''

# 运行脚本：
python clear_pyc.py
# 或者
python clear_pyc.py /path/to/your/project_directory

'''